Sometimes, multiple parties, each owning some data, want to collaborate with each other while preserving the privacy of their own data in the meantime. The data may be vertically partitioned across the multiple parties. That means that each party has different features or attributes (columns) of data for the same set of data entities (rows). As an example, consider a healthcare scenario where hospitals have data corresponding to their patients' demographics, biometrics and medications, while information about patients' fitness activity or diet habits are available through other parties (such as, wearable service providers, health app providers, etc.). Having access to the entire data would significantly improve the quality of data analysis and models built, as data from each party provides different information about the data entities. However, privacy concerns prohibit the parties from sharing their data with each other. Conventional solutions either target a particular analytical task and thus cannot be applied to generic analytical tasks, or assume two parties when applicable to generic analytical tasks with increased computational complexity when the number of parties is more than two. Hence, it is difficult to scale these conventional solutions to big data analytics and generic analytical tasks in a privacy-preserving manner, especially when more than two parties participate in the communications.